package it.agm.fanta.fragment;

import it.agm.activity.dialog.GenericDialog;
import it.agm.fanta.FantaserviceApp;
import it.agm.fanta.R;
import it.agm.fanta.adapter.FormazioneWriteAdapter;
import it.agm.fanta.asynctask.jersey.patch.Callback;
import it.agm.fanta.asynctask.jersey.patch.NetworkHandler;
import it.agm.fanta.constants.Constants;
import it.agm.fanta.model.CalciatoreFormazioneLega;
import it.agm.fanta.model.DettaglioFormazioneLega;
import it.agm.fanta.model.FormazioneLegaRead;
import it.agm.fanta.model.Giocatore;
import it.agm.fanta.model.RequestSetFormazione;

import java.util.ArrayList;
import java.util.List;

import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.ListView;
import android.widget.Spinner;

public class FormazioneWriteFragment extends Fragment {
	
	public static final String ARG_PLANET_NUMBER = "planet_number";
	private FormazioneWriteAdapter adapter = null;
	public FormazioneWriteFragment() {

	}

	@Override
	public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {
		View rootView = inflater.inflate(R.layout.fragment_formazione_write, container,false);
		updateData(rootView);
		return rootView;
	}

	/**
	 * @param rootView
	 */
	private void updateData(View rootView) {
		rootView.findViewById(R.id.save_formazione_button).setOnClickListener(
				new View.OnClickListener() {
					@Override
					public void onClick(View view) {
						
						if(FantaserviceApp.attaccantiDaSchierare != null && FantaserviceApp.difensoriDaSchierare != null
								&& FantaserviceApp.centrocampistiDaSchierare != null && FantaserviceApp.portieriDaSchierare != null){
							if(FantaserviceApp.attaccantiDaSchierare.size() == FantaserviceApp.attacco && FantaserviceApp.difensoriDaSchierare .size() == FantaserviceApp.difesa
									&& FantaserviceApp.centrocampistiDaSchierare.size() == FantaserviceApp.centrocampo && FantaserviceApp.portieriDaSchierare.size() ==1){
								if(NetworkHandler.checkConnection(FantaserviceApp.getAppContext())){
									FantaserviceApp.ripopolaFormazine();
									List<CalciatoreFormazioneLega> formazioneSchierata = calciatoriFormazioneAdapter();
									popolaRequest(formazioneSchierata);
									
									String url = Constants.URL_REST + Constants.SERVICE_WRITE_FORMAZIONE;
									NetworkHandler networkHandler = NetworkHandler.getInstance();
									networkHandler.write(url, FormazioneLegaRead[].class, null,
										new Callback<FormazioneLegaRead[]>() {
											@Override
											public void callback(FormazioneLegaRead[] formazione) {
																				
											}
										});
									}
								FantaserviceApp.formazioneReadFragment.caricaLista();
								FormazioneReadFragment fragment = FantaserviceApp.formazioneReadFragment;
								FragmentManager fragmentManager = getFragmentManager();
								fragmentManager.beginTransaction().replace(R.id.content_frame, fragment).commit();
							}else{
								new GenericDialog(FantaserviceApp.currentActivity(), "Necessario schierare almeno 11 giocatori","ERROR");
							}
						}else{
							new GenericDialog(FantaserviceApp.currentActivity(), "Necessario schierare almeno 11 giocatori","ERROR");
						}
						
					}

					/**
					 * @param formazioneSchierata
					 */
					private void popolaRequest(List<CalciatoreFormazioneLega> formazioneSchierata) {
						FantaserviceApp.requestSetFormazione = new RequestSetFormazione();
						FantaserviceApp.requestSetFormazione.setDettaglioFormazioneLega(new ArrayList<DettaglioFormazioneLega>());
						FantaserviceApp.requestSetFormazione.getDettaglioFormazioneLega().add(FantaserviceApp.dettaglio);
						FantaserviceApp.requestSetFormazione.setIdlega(FantaserviceApp.request.getIdlega());
						FantaserviceApp.requestSetFormazione.setUsername(FantaserviceApp.request.getUsername());
						FantaserviceApp.requestSetFormazione.setPassword(FantaserviceApp.request.getPassword());
						FantaserviceApp.requestSetFormazione.setCalciatoreFormazioneLega(formazioneSchierata);
					}

					/**
					 * @return
					 */
					private List<CalciatoreFormazioneLega> calciatoriFormazioneAdapter() {
						List<CalciatoreFormazioneLega> formazioneSchierata = new ArrayList<CalciatoreFormazioneLega>();
						for (Giocatore giocatoreTmp :  FantaserviceApp.formazioneWritten) {
							CalciatoreFormazioneLega calciatoreFormazioneLega = new CalciatoreFormazioneLega();
							calciatoreFormazioneLega.setIdcalciatore(giocatoreTmp.getIdcalciatore());
							calciatoreFormazioneLega.setLineup(giocatoreTmp.getLineup());
							calciatoreFormazioneLega.setPosizione(giocatoreTmp.getPosizione());
							formazioneSchierata.add(calciatoreFormazioneLega);
						}
						return formazioneSchierata;
					}

				});
		if(FantaserviceApp.rosa != null && FantaserviceApp.lega != null && !FantaserviceApp.rosa.isEmpty()){
			FantaserviceApp.generaIndici();
	        ListView listView = (ListView) rootView.findViewById(R.id.listViewCalciatoriDaSchierare);
//			ArrayList<Giocatore> list = App.rosa;
			if(FantaserviceApp.formazioneReaded != null){
				FantaserviceApp.formazioneWritten = FantaserviceApp.formazioneReaded;
				for (Giocatore giocatore : FantaserviceApp.formazioneWritten) {
					if(Giocatore.TITOLARE == giocatore.getLineup()){
						if(giocatore.getPosizione() >0){
							FantaserviceApp.indiciTitolari.get(giocatore.getPosizione() - 1).setChecked(true);
						}
					}else if(Giocatore.RISERVA == giocatore.getLineup()){
						if(giocatore.getPosizione() >0){
							FantaserviceApp.indiciRiserve.get(giocatore.getPosizione() - 1).setChecked(true);
						}
					}
				}
			}else{
				FantaserviceApp.formazioneWritten = new ArrayList<Giocatore>();
			}
			for (Giocatore giocatore : FantaserviceApp.formazioneWritten) {
				FantaserviceApp.addCalciatoreToListeFormazione(giocatore);
				
			}
			
			adapter = new FormazioneWriteAdapter(getActivity(), R.layout.row_calciatore_fromazione_write, FantaserviceApp.rosa);
			Spinner moduloSnipper = (Spinner) rootView.findViewById(R.id.moduloSnipper);
			 
			String[] elencoModuli = getResources().getStringArray(R.array.modulo_arrays);
			if(FantaserviceApp.dettaglio != null){
				for (int i=0 ; i<elencoModuli.length ; i++) {
					if(elencoModuli[i].equals(FantaserviceApp.dettaglio.getModulo())){
						moduloSnipper.setSelection(i);
					}
				}
			}else{
				FantaserviceApp.dettaglio = new DettaglioFormazioneLega();
				FantaserviceApp.dettaglio.setNomesquadra(FantaserviceApp.lega.getNomesquadra());
				FantaserviceApp.dettaglio.setTipo("Standard");
			}
			moduloSnipper.setOnItemSelectedListener(
	                new OnItemSelectedListener() {

						@Override
						public void onItemSelected(AdapterView<?> parent,
								View view, int position, long id) {
							
								FantaserviceApp.setSessionModule();
								if(!FantaserviceApp.dettaglio.getModulo().equals((String)parent.getItemAtPosition(position))){
									FantaserviceApp.generaIndici();
									FantaserviceApp.dettaglio.setModulo((String)parent.getItemAtPosition(position));
									FantaserviceApp.setSessionModule();
									FantaserviceApp.dettaglio.setModulo((String)parent.getItemAtPosition(position));
									FantaserviceApp.resetListeFormazione();
									for (Giocatore newGioc : FantaserviceApp.rosa) {
										newGioc.setLineup(' ');
										FantaserviceApp.formazioneReaded.add(newGioc);
									}
//									App.formazioneReaded = App.rosa;
									FantaserviceApp.formazioneWriteFragment.refreshData();
								}
						}

						

						@Override
						public void onNothingSelected(AdapterView<?> parent) {
							// TODO Auto-generated method stub
							
						}
	                });
			listView.setAdapter(adapter);
		}
	}

	
	
	public void refreshData() {
		updateData(getView());
		adapter.notifyDataSetChanged();
	}
}
